package org.terramagnet.workflow.dynamic;

import com.fasterxml.jackson.databind.JsonNode;
import java.util.Collection;
import org.terramagnet.workflow.dynamic.databinding.Field;

/**
 * 工作流引擎.
 *
 * <p>
 * 单例的流程定义。</p>
 *
 * @author terrason
 */
public interface Workflow {

    /**
     * 全局输入输出命名空间.
     */
    public static final String GLOBAL = "_";
    /**
     * “开始”工作节点名称.
     */
    public static final String DEFAULT_START_NAME = "_s";

    /**
     * 从头开始执行所有工作任务.
     *
     * @param context 工作流上下文参数
     * @return 工作流进程
     */
    WorkflowProcess process(JsonNode context);

    /**
     * 流程名称.
     */
    String name();

    /**
     * 流程说明.
     */
    String description();

    /**
     * 流程输入定义.
     */
    Collection<Field> inputs();

    /**
     * 流程输出定义.
     */
    Collection<Field> outputs();

    /**
     * 当前工作流共有多少步骤.
     */
    int size();

    /**
     * 单签工作流是否是空的. 空工作流没有任何步骤.
     */
    boolean isEmpty();
}
